home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1998 May / EnigmA AMIGA RUN 27 (1998)(G.R. Edizioni)(IT)[!][issue 1998-05].iso / earcd / sinclair-ql / c68patch_bas < prev    next >
Text File  |  1998-02-23  |  3KB  |  92 lines

  1. 10  TURBO_objfil "ram1_C68PATCH_task"
  2. 11  TURBO_taskn "C68PATCH"
  3. 12  TURBO_repfil "scr"
  4. 13  TURBO_windo 0
  5. 14  TURBO_diags 'omit'
  6. 15  TURBO_struct "S"
  7. 16  TURBO_model "<"
  8. 17  TURBO_objdat 10
  9. 18  TURBO_optim "R"
  10. 19 :
  11. 1000 REMark ------------------------------
  12. 1010 REMark  C68PATCH_bas - Mark J Swift
  13. 1020 REMark ------------------------------
  14. 1030 :
  15. 1040 DIM InFile$(100),verstag$(4),d$(8)
  16. 1050 verstag$="1.01"
  17. 1060 OPEN#3;"Con_456x134a28x62"
  18. 1070 REPeat outer_loop
  19. 1080  WINDOW#3;456,144,28,57:PAPER#3;0:INK#3;7:CLS#3:BORDER#3;3,2:BORDER#3;2,0:BORDER#3;1,2:WINDOW#3;438,130,36,64
  20. 1090  CSIZE#3;2,1:PRINT#3;"C68PATCH v";verstag$:CSIZE#3;0,0
  21. 1100  PRINT#3;"C68 compiled code patcher by MARK J SWIFT"
  22. 1110  PRINT#3;\"Fixes CACHE problems on 68040 and 68060 processors."
  23. 1120  PRINT#3;\"Current tasks compiled with the C68 compiler fail when COPYBACK is"
  24. 1130  PRINT#3;"enabled. This program is a quick cure. The bug has been reported so"
  25. 1140  PRINT#3;"this utility may become redundant the next time C68 is updated."
  26. 1150  INPUT#3;\"INPUT NAME OF C68 TASK TO FIX ? ";InFile$
  27. 1160  IF InFile$="" THEN EXIT outer_loop
  28. 1170  OPEN_IN#6;InFile$
  29. 1180  fd=0:fl=FLEN(#6):ft=FTYP(#6):IF ft THEN fd=FDAT(#6)
  30. 1190  CLOSE#6
  31. 1200  IF fl=0 THEN 
  32. 1210   PRINT#3;\"File empty!"&CHR$(10)
  33. 1220   IF InFlg%=0 THEN EXIT main_loop
  34. 1230  ELSE 
  35. 1240   IF fd=0 THEN 
  36. 1250    PRINT#3;\"Not an executable task!"
  37. 1260   ELSE 
  38. 1265    plen=108
  39. 1270    ad=ALCHP(fl+plen)
  40. 1275    a=ad
  41. 1280    LBYTES InFile$,a+plen
  42. 1281    REMark Check if patched by earlier patcher
  43. 1282    IF (PEEK_L(a+plen+120+472)=HEX("6000FDE2")) AND (PEEK_L(a+plen+120+498)=HEX("6000FDEE")) THEN 
  44. 1283     PRINT#3;\"Removing outdated patch"
  45. 1284     POKE_L a+plen+120+472,HEX("70000C2E")
  46. 1285     POKE_L a+plen+120+498,HEX("4A80670E")
  47. 1286     a=a+120
  48. 1287     fl=fl-120
  49. 1288    END IF 
  50. 1289    REMark check if a valid C68 program
  51. 1290    Flg%=0
  52. 1300    IF PEEK_L(a+plen+472)=HEX("70000C2E") THEN 
  53. 1310     IF PEEK_L(a+plen+476)=HEX("002000A1") THEN 
  54. 1320      IF PEEK_L(a+plen+498)=HEX("4A80670E") THEN 
  55. 1330       IF PEEK_L(a+plen+502)=HEX("0C2E0040") THEN 
  56. 1340        IF PEEK_W(a+plen+506)=HEX("00A1") THEN 
  57. 1350         Flg%=NOT(0)
  58. 1360        END IF 
  59. 1370       END IF 
  60. 1380      END IF 
  61. 1390     END IF 
  62. 1400    END IF 
  63. 1410    IF Flg% THEN 
  64. 1420     RESTORE 1630
  65. 1430     FOR i=0 TO plen-4 STEP 4
  66. 1440      READ d$
  67. 1450      POKE_L a+i,HEX(d$)
  68. 1460     END FOR i
  69. 1470     POKE_L a+plen+472,HEX("6000FDEC")
  70. 1480     POKE_L a+plen+498,HEX("6000FDD4")
  71. 1490     DELETE InFile$
  72. 1500     SEXEC InFile$,a,fl+plen,fd
  73. 1510     PRINT#3;\"TASK successfully patched"
  74. 1520    ELSE 
  75. 1530     PRINT#3;\"Sorry, I don't recognise this task"
  76. 1540    END IF 
  77. 1550    RECHP ad
  78. 1560   END IF 
  79. 1570  END IF 
  80. 1580  PAUSE 150
  81. 1590 END REPeat outer_loop
  82. 1600 CLOSE#3
  83. 1610 STOP
  84. 1620 REMark m/c patches
  85. 1630 DATA "60260000","00004AFB","0006435F","50524F47"
  86. 1640 DATA "00000000","00000000","00000000","00000000"
  87. 1650 DATA "00000000","00000000","706CDDC0","99C09BC0"
  88. 1660 DATA "603A7000","2F010C2E","001000A1","632A4E7A"
  89. 1670 DATA "1002C340","00410808","0C2E0030","00A16314"
  90. 1680 DATA "4A406A02","F4B84A80","6A06F478","4A816B02"
  91. 1690 DATA "F458F498","4E7B1002","221F4E75"
  92.